package entidades;

import util.*;
import java.util.List;
import java.util.LinkedList;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author JFM
 */
public class Perfil extends EntidadSimple
	{
	// --- Constantes --- //

	private static final String NOMBRE_TABLA = "perfiles";

	public static final int ADMINISTRADOR = 1;
	public static final int VENDEDOR = 2;
	public static final int PRODUCTOR = 3;



	// --- Constructores --- //

	public Perfil()
		{ super(); }

	public Perfil(int id) throws SQLException
		{ super(id); }

	public Perfil(String id) throws SQLException
		{ super(id); }

	public Perfil(ResultSet result) throws SQLException
		{ super(result); }



	/* --- Metodos MySQL --- */

	@Override
	public void guardar() throws SQLException
		{
        ResultSet result = MySQL.executeQuery("Call Perfiles_Save (" +
				MySQL.formatId(id) + ", " +
				MySQL.format(descripcion) + ")");

		if(result.next())
			{
			if( result.getMetaData().getColumnCount() == 1)
				{
				String msj = result.getString("mensaje");
				throw new SQLException(msj);
				}
			else
				leer(result);
			}

		result.getStatement().close();
		}

	@Override
	public void borrar() throws SQLException
		{
        ResultSet result = MySQL.executeQuery("Call Perfiles_Delete(" +id + ") ");

		if(result.next())
			{
			String msj = result.getString("mensaje");
			if(msj.length() > 0) throw new SQLException(msj);
			}

		result.getStatement().close();
		}

	@Override
	public String getNombreTabla()
		{ return NOMBRE_TABLA; }

	public static List<Perfil> listar() throws SQLException
		{ return (List) EntidadSimple.listar(Perfil.class, NOMBRE_TABLA); }

	public void borrarPermisos() throws SQLException
		{ MySQL.executeUpdate("DELETE FROM permisos_x_perfiles WHERE perfil_id = " + id); }

	public void asignarPermiso(int permisoId) throws SQLException
		{ MySQL.executeUpdate("INSERT INTO permisos_x_perfiles (perfil_id, permiso_id) VALUES ("+id+", "+permisoId+") "); }

	public List<Integer> obtenerPermisos() throws SQLException
		{
		LinkedList<Integer> lista = new LinkedList();
        ResultSet result = MySQL.executeQuery("SELECT permiso_id FROM permisos_x_perfiles WHERE perfil_id = "+id);

		while(result.next())
			{
			Integer estado = new Integer( result.getInt("permiso_id") );
			lista.add(estado);
			}

		result.getStatement().close();
		return lista;
		}



	/* --- Metodos varios --- */

	@Override
	public String toString()
		{ return id + ": " + descripcion; }



	/* --- Pruebas --- */

	public static void main(String args[]) throws Exception
		{
		Perfil tu = new Perfil();
		tu.setId(1);
		tu.cargar();
		System.out.println(tu);

		System.out.println("----------------");

		List<Perfil> lista = Perfil.listar();
		for(int i=0; i<lista.size(); i++)
			{ System.out.println(lista.get(i)); }
		}
	}
